"""
主要用于对所有接口的公共功能的集合，统一管理

功能1：处理URL，返回一个完整的URL
功能2：重新封装get方法、post方法
功能3：请求头的处理
功能4：登录
"""
from setting import BASE_URL,LOGIN_NFO
from loguru import logger
from utils.object_utils import cache
import requests

class Base(object):
    # 实现url的拼接
    def get_url(self,path,params=None):
        if params:
            full_url = BASE_URL+path+'?'+params
            return full_url
        return BASE_URL+path

    # 实现get方法
    def get(self,url):
        result = None
        response = requests.get(url,headers=self._get_headers())
        try:
            result = response.json()
            logger.success('请求url：{},返回结果：{}'.format(url,result))
            return result
        except Exception as e:
            logger.error('请求get方法数据异常,返回数据为{}'.format(result))


    # 实现post方法
    def post(self,url,data):
        result = None
        response = requests.post(url,json=data,headers=self._get_headers())
        try:
            result = response.json()
            logger.success('请求url：{},返回结果：{}'.format(url,result))
            return result
        except Exception as e:
            logger.error('请求post方法数据异常,返回数据为{}'.format(result))



    # 实现请求头的处理
    def _get_headers(self):
        headers = {'Content-Type':'application/json'}
        token = cache.get('token')
        if token:
            headers.update({'X-Litemall-Admin-Token':token})
            return headers
        return headers

    # 实现登录
    def login(self):
        login_path = 'admin/auth/login'
        login_url = self.get_url(login_path)
        reslut = self.post(login_url,LOGIN_NFO)
        try:
            if 0 == reslut.get('errno'):
                logger.success('请求接口登录成功')
                token = reslut.get('data').get('token')
                cache.set('token',token)
                return reslut
            else:
                logger.error('请求登录接口失败，返回结果:{}'.format(reslut))
        except Exception as e:
            logger.error('请求接口返回异常，返回结果:{}'.format(reslut))
            logger.error('返回错误:{}'.format(e))







if __name__ == '__main__':
    base = Base()
    print(base.get_url('admin/auth/login'))

    search_user_url = base.get_url('admin/admin/list','page=1&limit=20&sort=add_time&order=desc')
    print(base.get(search_user_url))

    login_user_url = base.get_url('admin/auth/login')
    print(base.post(login_user_url,{'username':'admin123','password':'admin123'}))
    print(base.login())

